package cn.e4j.core.quartz.job;

import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.kettle.KettleUtil;
import cn.e4j.core.quartz.AppJob;
import cn.e4j.core.util.*;
import cn.e4j.modular.system.entity.SysLoad;
import cn.e4j.modular.system.entity.SysLoadlog;
import cn.e4j.modular.system.entity.SysTask;
import cn.e4j.modular.system.service.SysLoadService;
import cn.e4j.modular.system.service.SysLoadlogService;
import cn.e4j.modular.system.service.SysTaskService;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;

import java.io.File;
import java.text.DateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * kettle转换任务类
 * Created by yuan_rz on 2019-03-12.
 */
@Component("KettleTransJob")
@DisallowConcurrentExecution
@Slf4j
public class KettleTransJob extends AppJob{

    @Override
    public String getDescribe() {
        return "转换任务类";
    }
    @Override
    public String getDescribeOra() {
        return "转换任务类";
    }

    @Override
    public void logic(JobExecutionContext context,SysTask sysTask,Map<String,String> inDto){
        log.info("KettleTransJob start...");
//        SysLoadService sysLoadService = SpringContextHolder.getBean("sysLoadService");
//        SysLoadlogService sysLoadlogService = SpringContextHolder.getBean("sysLoadlogService");
//        Date date = new Date();
//        SysLoad sysLoad = new SysLoad();
//        SysLoadlog sys_loadlogPO = new SysLoadlog();
//        try {
//            //日志文件初始化--start
//            sys_loadlogPO.setID(AppCxt.timeId());
//            sys_loadlogPO.setLOAD_TYPE(sysTask.getTASK_NAME());
//            //验证user
//            if(ToolUtil.isEmpty(inDto.get("user"))){
//                throw new RuntimeException("user为空");
//            }else{
//                sys_loadlogPO.setCREATE_BY(inDto.get("user"));
//            }
//            sys_loadlogPO.setCREATE_DATE(LocalDateTime.now());
//            sys_loadlogPO.setSTART_TIME(sys_loadlogPO.getCREATE_DATE());
//            sys_loadlogPO.setOPERATOR(sys_loadlogPO.getCREATE_BY());
//            //日志文件初始化--end
//            //获取Load任务信息
//            if(ToolUtil.isEmpty(inDto.get("loadid"))){
//                throw new RuntimeException("未获取到同步任务配置");
//            }
//            sysLoad = sysLoadService.getById(inDto.get("loadid"));
//            //验证转换文件--start
//            String transFileName = "";
//            if(ToolUtil.isEmpty(sysLoad.getLOAD_FILE())){
//                throw new RuntimeException("Kettle转换文件名为空");
//            }else if(!new File(sysLoad.getLOAD_FILE()).exists()){
//                throw new RuntimeException("Kettle转换文件不存在");
//            }else{
//                transFileName = sysLoad.getLOAD_FILE();
//            }
//            //验证转换文件--end
//            //执行参数--start
//            Map<String,String> params = new HashMap<>();
//            //同步任务档额外参数
//            if(ToolUtil.isNotEmpty(sysLoad.getLOAD_PARAMS())){
//                ToolUtil.copyProperties(JSONObject.parse(sysLoad.getLOAD_PARAMS()),params);
//            }
//            //验证ent
//            if(ToolUtil.isEmpty(inDto.get("ent"))){
//                throw new RuntimeException("ent为空");
//            }else{
//                params.put("ent",inDto.get("ent"));
//            }
//            /*//验证site
//            if(ToolUtil.isEmpty(inDto.get("site"))){
//                throw new RuntimeException("site为空");
//            }else{
//                params.put("site",inDto.get("site"));
//            }*/
//            //验证上次同步日期
//            if(ToolUtil.isEmpty(inDto.get("trandate"))){
//                if(ToolUtil.isEmpty(sysLoad.getLOAD_TRANDATE())){
//                    throw new RuntimeException("同步日期为空");
//                }else{
//                    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//                    params.put("trandate",df.format(sysLoad.getLOAD_TRANDATE()));
//                }
//            }else{
//                params.put("trandate",inDto.get("trandate"));
//            }
//            //日志id
//            params.put("logid", sys_loadlogPO.getID());
//            //日期的三种常用格式
//            params.put("time", DateUtils.formatDate(date,"HH:mm:ss"));//时间
//            params.put("date", DateUtils.formatDate(date,"yyyy-MM-dd"));//日期
//            params.put("datetime", DateUtils.formatDate(date,DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss));//日期
//            //执行参数--end
//            //执行转换
//            KettleUtil.callNativeTransWithParams(params,transFileName);
//            //成功标识
//            sys_loadlogPO.setIS_SUCCESS("Y");
//        } catch (Exception e) {
//            //失败标识
//            sys_loadlogPO.setIS_SUCCESS("N");
//            sys_loadlogPO.setREMARK(e.getMessage());
//            e.printStackTrace();
//            //抛出异常
//            throw new RuntimeException(e.getMessage());
//        } finally {
//            //上次同步日期
//            sysLoad.setLOAD_TRANDATE(LocalDateTime.now());
//            sysLoadService.editData(sysLoad);
//            //结束日期
//            sys_loadlogPO.setEND_TIME(LocalDateTime.now());
//            sysLoadlogService.addData(sys_loadlogPO);
//        }
    }
}
